package rladidxo.basic;

import java.util.Scanner;

public class J09_Exception {
public static void main(String[] args) 
throws Exception {
	// 예외 처리 - 일종의 오류
	// 프로그램상에서 오류error의 종류
	// 1. compile-time error
	//    오타등의 잘못된 코드 작성이 원인
	//	    개발자가 충분히 수습 가능
	// 2. runtime-time error
	//	   프로그램 실행시 발생하는 오류
	//    논리적 오류 (개발자 수습가능)
	// 	   잘못된 동작(개발자 수습가능)이나 
	//    특별한 상황(개발자 수습불가)이 원인

	// 따라서, 예외는 프로그램 실행 중
	// 발생하는 오류를 개발자가 처리하기 위해 코드로 작성하는 조치사항을 의미
	// 이것을 통해 오류를로 인한 프로그램 실행
	// 중단을 막을 수 있음

	// 예외 : checked exception
	//       unchecked exception
	
	// 상황1) 두개의 정수를 입력받아 두 수를 나눈 결과를 출력하는 프로그램을 작성
	// 예외처리 하지 않았을 경우
	int num1 = 0, num2=0, result;
	Scanner sc = new Scanner(System.in);
	/*System.out.print("두개의 정수를 입력하시오:");
	num1=sc.nextInt();
	num2=sc.nextInt();
	sc.close();
	result = num1/num2;
	System.out.println("결과값: "+result);*/
	//num2에 0이 입력 되면 num1을 0으로 나눌 수 없으므로 오류 발생하고 프로그램 중단
	//중단시 코드16줄 이상은 출력안됨
	/*w=1;
	while(w==1){
	System.out.print("두개의 정수를 입력하시오:");
	num1=sc.nextInt();
	num2=sc.nextInt();
		sc.close();
	if (num1==0 || num2==0){System.out.println("입력값은 0이 될수 없습니다.");}
	else if(num1>num2){result = num1/num2;
	System.out.println("결과값: "+result);}
	else if(num2<num1){result = num2/num1;
	System.out.println("결과값: "+result);}}*/
	// 오류가 발생할 조건을 if문으로 막음
	// 오류 발생 조건이 많을 경우 다중 if문으로 사용해야 하는데 그러면 코드가 복잡해짐	
	
	
	/*System.out.print("두개의 정수를 입력하시오:");
	try{
	num1=sc.nextInt();
	num2=sc.nextInt();
		sc.close();
	result = num1/num2;
	System.out.println("결과값: "+result);
	}
	catch(Exception ex){System.out.println("입력값은  숫자이고 0이상입니다.");}*/
	// 자바에서는 오류발생시 예외exception처리 매커니즘을 사용함
	// 오류가 발생할 가능성이 있는 코드를 
	// try - catch 블럭으로 지정하고 chatch 에서 오류에 대한 조치사항을 작성
	
	
	// 예외 던지기
	System.out.print("두개의 정수를 입력하시오:");
	try{
	num1=sc.nextInt();
	num2=sc.nextInt();
	/*	sc.close();*/
	}catch(Exception ex){
		throw new Exception("문자이 잘못되었습니다");
		// 입력시 발생하는 예외를
		// 각각의 catch 블럭에서 처리하지 않고
		// 한곳에 모아서 처리하기 위해
		// throw 라는 명령으로 예외를
		// 다른 곳으로넘김
	}
	try{
	result = num1/num2;
	System.out.println("결과값: "+result);
	}catch(Exception ex){
		throw new Exception("잘못된 연산입니다.");
	}
	
}}